package manager;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EditServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");


		String id = request.getParameter( "id" );

			ArrayList<String> error_message = new ArrayList<String>();

			boolean error = false;

			String path = null;
			path = "/manager/managerEdit.jsp";

			if(id == null || id.equals("")) {

				error_message.add("未入力の項目があります");
				path = "/manager/managerEdit.jsp";
				error = true;

//				}
		}

			if(!error){
			String sql = "SELECT * FROM managers WHERE ID = " + id;

			Connection con = null;
			Statement smt = null;

		try{
				con = common.DBManager.getConnection();
				smt = con.createStatement();

				ManagerBean bean = new ManagerBean();
				ResultSet rs = smt.executeQuery( sql );
				if(rs.next()) {
					bean.setId(rs.getInt("id"));
					bean.setName(rs.getString("name"));
					bean.setRuby(rs.getString("ruby"));
					bean.setPassword(rs.getString("password"));
				}
				request.setAttribute("bean", bean);


			}catch( SQLException e ){

				throw new ServletException( e );

			}finally{

				if( smt != null ){

					try{
						smt.close();
					}catch( SQLException ignore ){
						//　何もしない
					}
				}
				if( con != null ){

					try{
						con.close();
					}catch( SQLException ignore ){
						//　何もしない
					}
				}
			}

		}

			request.getRequestDispatcher( path ).forward(request, response);
		}



//=============【　正常処理　】『担当者情報変更』画面より受けとったパラメータで『担当者情報変更確認』画面を表示======
//=============【エラー発生時】『担当者情報変更』画面へ戻る======

	public void doPost(HttpServletRequest request,HttpServletResponse response)
			throws ServletException, IOException {

//　入力パラメータの文字エンコーディング
		request.setCharacterEncoding("UTF-8");

//　入力パラメータを取得
//　変更するレコードをidで指定
		String id = request.getParameter("id");
		String password = request.getParameter( "password" );
		String name = request.getParameter( "name" );
		String ruby = request.getParameter( "ruby" );

//　エラーメッセージを格納するArrayListの生成
		ArrayList<String> error_message = new ArrayList<String>();

//　エラーチェックのフラグ
		boolean error = false;

//　エラーのフィールドを赤く表示
		String error_password = null;
		String error_name = null;
		String error_ruby = null;

//　遷移先のパス
		String path = null;

//----------【例外処理】----------

//　未入力の確認

		if((password == null || password.equals("")) ||
				(name == null || name.equals("")) ||
				(ruby == null || ruby.equals(""))){

			error_message.add("すべての項目を入力してください");
			error = true;

			if(password == null || password.equals("")){

				error_password = "error";
			}
			if(name == null || name.equals("")){

				error_name = "error";
			}
			if(ruby == null || ruby.equals("")){

				error_ruby = "error";
			}
		}

//　全角カナの確認（ruby）
		//　入力パターンを登録します
		Pattern pattern_ruby = Pattern.compile("^[ァ-ヶー]*$");;

		//　指定された入力とこのパターンをマッチする正規表現エンジンを作成
		Matcher matcher_ruby = pattern_ruby.matcher(ruby);
		//　入力された値が正規表現とマッチしているか調べる
		//　正規表現のパターンとマッチした場合にのみ true
		//　matches メソッドは、入力シーケンス全体とパターンをマッチする
		if( !matcher_ruby.matches() ){
			error_message.add("フリガナは、全角カタカナで入力してください");
			error = true;
			error_ruby = "error";
		}

//　パスワードのチェック
		if(!Passcheck(password)){
			//　パスワードの整合性チェック
			error_message.add("パスワードは、4桁以上10桁以下の半角英数字にしてください");
			error = true;
			error_password = "error";
		}

		if(!error){

//----------【例外なし正常処理】----------

			ManagerBean bean2 = new ManagerBean();
			bean2.setId(Integer.parseInt(id));
			bean2.setPassword(password);
			bean2.setName(name);
			bean2.setRuby(ruby);

			request.setAttribute("bean", bean2);

			path = "/manager/managerEditCheck.jsp";

		}else{

//----------【例外処理】----------

			ManagerBean bean = new ManagerBean();
			bean.setId(Integer.parseInt(id));
			bean.setPassword(password);
			bean.setName(name);
			bean.setRuby(ruby);

			request.setAttribute("bean", bean);

			//　リクエストスコープに"引数1"という名前で引数2の文字列を登録
			request.setAttribute( "error_message" , error_message );
			request.setAttribute( "error_password" , error_password );
			request.setAttribute( "error_name" , error_name );
			request.setAttribute( "error_ruby" , error_ruby );;

			path = "/manager/managerEdit.jsp";
		}

//　JSPに画面遷移、フォワード
		RequestDispatcher dispatcher = request.getRequestDispatcher( path );
		dispatcher.forward(request, response);
	}

//　パスワードの整合性の識別　　パスワードは半角英数字のみなのでそれ以外の時はNG
	private boolean Passcheck(String pass){

		boolean check = true;

		char[] chars = pass.toCharArray();
		 	if(chars.length < 4 || chars.length > 10){
		 		check = false;
		 	}else{
			    for (int i = 0; i < chars.length; i++) {
			         char c = chars[i];
			         if ((c <= '\u007e') || // 英数字
			        	                (c == '\u00a5') || // \記号
			        	                (c == '\u203e') || // ~記号
			        	               (c >= '\uff61' && c <= '\uff9f') // 半角カナ
			 	        ) {

			         } else {
			        	             check = false;
			        	             break ;
			         }
			    }
		 	}
		return check;
	}
}


